home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / +system+ / tools / sound / ahi / developer / devloper.lzx / examples / Low-level / RecordTestQnD / RecordTestQnD.s
Text File  |  1979-12-22  |  3KB  |  182 lines

  1. *** ScR ***
  2.  
  3. * This is a quick & dirty example of how to read data from
  4. * a sound card. A real program would of course not mess with
  5. * the hardware registers.
  6. * Press Fire on joystick to exit. Effect will only show on
  7. * a native amiga video mode (obviously). 68020+ only.
  8. * Updated (but untested, unfortunately) for beta release 2.
  9.  
  10.  
  11.     incdir    include:
  12.     include    lvo/exec_lib.i
  13.     include    dos/dos.i
  14.     include    lvo/dos_lib.i
  15.     include    devices/ahi.i
  16.     include    lvo/ahi_lib.i
  17.  
  18. call    MACRO
  19.     jsr    _LVO\1(a6)
  20.     ENDM
  21.  
  22.  
  23. skipw    MACRO
  24.     IFNE    NARG
  25.     FAIL    !!! NO ARGUMENTS ALLOWED !!!
  26.     ENDC
  27.  
  28.     dc.w    $0c40                    ;CMPI.W #????,d0
  29.     ENDM
  30.  
  31. skipl    MACRO
  32.     IFNE    NARG
  33.     FAIL    !!! NO ARGUMENTS ALLOWED !!!
  34.     ENDC
  35.  
  36.     dc.w    $0c80                    ;CMPI.L #????????,d0
  37.     ENDM
  38.  
  39. base    MACRO
  40.     IFC    '\1','exec'
  41.         move.l    4.w,a6
  42.     ELSE
  43.         move.l    \1base(pc),a6
  44.     ENDC
  45.     ENDM
  46.  
  47. push    MACRO
  48.     move.l    \1,-(sp)
  49.     ENDM
  50.  
  51. pop    MACRO
  52.     move.l    (sp)+,\1
  53.     ENDM
  54.  
  55. pushm    MACRO
  56.     movem.l    \1,-(sp)
  57.     ENDM
  58.  
  59. popm    MACRO
  60.     movem.l    (sp)+,\1
  61.     ENDM
  62.  
  63. BOOST=3
  64.  
  65. start
  66.     base    exec
  67.     moveq    #-1,d0
  68.     moveq    #0,d1
  69.     call    AllocMem        ;flushlibs
  70.  
  71.     moveq    #0,d0
  72.     lea    dosname(pc),a1
  73.     call    OpenLibrary
  74.     move.l    d0,dosbase
  75.     beq.w    nodos
  76.     OPENAHI    1
  77.     move.l    d0,ahibase
  78.     beq.w    .noahi
  79.     move.l    d0,a6
  80.  
  81.     lea    tags(pc),a1
  82.     call    AHI_AllocAudioA
  83.     move.l    d0,ctrlblock
  84.     beq.w    .noctrlblock
  85.  
  86.     move.l    ctrlblock(pc),a2
  87.  
  88.     lea    ctrltags(pc),a1
  89.     call    AHI_ControlAudioA
  90.     tst.l    d0
  91.     bne    .exit
  92.  
  93.     move.w    #$80,$dff096            ;turn off copper...
  94.     move.w    #$1000,$dff100            ;1 bpl...
  95.  
  96. .l
  97.     base    dos
  98.     moveq    #1,d1
  99.     call    Delay
  100.     btst    #7,$bfe001
  101.     bne.b    .l
  102.  
  103.     move.w    #$8080,$dff096            ;turn on copper
  104.  
  105. .exit
  106.     base    ahi
  107.     move.l    ctrlblock(pc),a2
  108.     call    AHI_FreeAudio
  109.  
  110. .noctrlblock
  111. .noahi
  112.     CLOSEAHI
  113.     base    exec
  114.     move.l    dosbase(pc),a1
  115.     call    CloseLibrary
  116. nodos
  117.     rts
  118.  
  119. RecordFunc:
  120.     blk.b    MLN_SIZE
  121.     dc.l    VU
  122.     dc.l    0
  123.  
  124. ;in:
  125. * A0    (struct Hook *)
  126. * A2    (struct AHIAudioCtrl *)
  127. * A1    (struct AHIRecordMessage *)
  128.  
  129. VU:
  130.     pushm    d2-d3
  131.  
  132.     cmp.l    #AHIST_S16S,ahirm_Type(a1)
  133.     bne.b    .exit                ;unknown buffer type
  134.  
  135.     move.l    ahirm_Length(a1),d0
  136.     move.l    d0,d3
  137.     lsl.l    #1,d0
  138.     move.l    ahirm_Buffer(a1),a0
  139.     moveq    #0,d1
  140. .vuloop
  141.     moveq    #0,d2
  142.     move.w    (a0)+,d2
  143.     bpl.b    .pos
  144.     neg.w    d2
  145. .pos
  146.     add.l    d2,d1
  147.     sub.l    #1,d0
  148.     bne.b    .vuloop
  149.  
  150.     mulu.w    #32768/16/BOOST,d3
  151.     divu.l    d3,d1
  152.     cmp.w    #15,d1
  153.     bmi.b    .inrange
  154.     move.w    #$f00,d1
  155. .inrange
  156.     move.w    d1,$dff180
  157.     move.w    d1,$dff182
  158. .exit
  159.     moveq    #0,d0                ;VERY IMPORTANT!
  160.     popm    d2-d3
  161.     rts
  162.  
  163. tags
  164.     dc.l    AHIA_MixFreq,3000
  165.     dc.l    AHIA_AudioID,$0002000D
  166.     dc.l    AHIA_Channels,1
  167.     dc.l    AHIA_Sounds,1
  168.     dc.l    AHIA_RecordFunc,RecordFunc
  169.     dc.l    TAG_DONE
  170.  
  171. ctrltags
  172.     dc.l    AHIC_MonitorVolume,$10000        ; 1.0, full volume
  173.     dc.l    AHIC_Record,TRUE
  174.     dc.l    TAG_DONE
  175.  
  176. ctrlblock    dc.l    0
  177. ahibase        dc.l    0
  178. dosbase        dc.l    0
  179. ahiname        AHINAME
  180. dosname        DOSNAME
  181.  
  182.